I. Wzorce kreacyjne
1. Singleton
2. Budowniczy
3. Prototyp
4. Fabryka
5. Fabryka abstrakcyjna
II. Wzorce strukturalne
1. Adapter
2. Most
3. Kompozyt
4. Dekorator
5. Fasada
6. Pyłek
7. Pełnomocnik
III. Wzorce czynnościowe
1. Łańcuch zobowiązań
2. Polecenie
3. Interpreter
4. Iterator
5. Mediator
6. Pamiątka
7. Obserwator
8. Stan
9. Strategia
10. Metoda szablonowa
11. Odwiedzający

Mediator - wzorzec projektowy (design pattern) - java

1. Cel:
Wzorzec Mediator definiuje jak obiekty oddziałują na siebie bez wyraźnego odniesienia się do siebie.
2. Problem:
Chcemy uzyskać luźne połączenie pomiędzy obiektami.
Jest to obecne, gdy mamy do czynienia z zestawem dobrze zdefiniowanych obiektów,
które komunikują się w złożony sposób.

3. Rozwiązanie:
Chcemy uniknąć tzw. spagetti kod pomiędzy obiektami.
Chcemy umożliwić zcentralizowane komunikowanie się między powiązanymi objektami.
Tworzymy coś na wzór hub-u lub router-a do komunikacji pomiędzy obiektami.
Mediator ma informację o wszystkich zaprzyjaźnionych obiektach (colleagues).
Obiekty (colleague) nie komunikują się pomiędzy sobą bezpośrednio,
służy do tego mediator, do komunikacji między nimi.
Powiązane obiekty (colleagues) nic nie wiedzą o sobie.
Wzorca mediator używamy kiedy komunikacja pomiędzy obiektami jest złożona.

4. Diagram klas wzorca Mediator:


5. Implementacja:
Klasa testująca:
  1. public class MediatorTest {
  2. public static void main(String[] args) {
  3. Mediator mediator = new ApplicationMediator();
  4. Colleague desktop = new DesktopColleague(mediator);
  5. Colleague mobile = new MobileColleague(mediator);
  6. mediator.addColleague(desktop);
  7. mediator.addColleague(mobile);
  8. desktop.send("Witaj!");
  9. mobile.send("Cześć!");
  10. }
  11. }
interface i implementacja wzorca mediator:
  1. public interface Mediator {
  2. void send(String message, Colleague colleague);
  3. void addColleague(Colleague colleague);
  4. }
  5.  
  6. public class ApplicationMediator implements Mediator {
  7. private List<Colleague> colleagues;
  8. public ApplicationMediator() {
  9. colleagues = new ArrayList<>();
  10. }
  11.  
  12. public void addColleague(Colleague colleague) {
  13. colleagues.add(colleague);
  14. }
  15.  
  16. public void send(String message, Colleague originator) {
  17. for(Colleague colleague : colleagues) {
  18. if(colleague != originator) {
  19. colleague.receive(message);
  20. }
  21. }
  22. }
  23. }
  24.  
  25.  
  26. public abstract class Colleague {
  27. private Mediator mediator;
  28. public Colleague(Mediator mediator) {
  29. this.mediator = mediator;
  30. }
  31. public void send(String message) {
  32. mediator.send(message, this);
  33. }
  34. public Mediator getMediator() {
  35. return mediator;
  36. }
  37. public abstract void receive(String message);
  38. }
  39.  
  40. public class DesktopColleague extends Colleague {
  41. public DesktopColleague(Mediator mediator) {
  42. super(mediator);
  43. }
  44. public void receive(String message) {
  45. System.out.println("Colleague recieved: " + message);
  46. }
  47. }
  48.  
  49. public class MobileColleague extends Colleague {
  50. public MobileColleague(Mediator mediator) {
  51. super(mediator);
  52. }
  53. public void receive(String message) {
  54. System.out.println("Colleague recieved: " + message);
  55. }
  56. }
6. Zastosowanie w kodzie java:
- java.util.Timer (wszystkie metody scheduleXXX())
- java.util.concurrent.Executor#execute()
- java.util.concurrent.ExecutorService (metody: invokeXXX() i submit())
- java.util.concurrent.ScheduledExecutorService (wszystkie metody: scheduleXXX())
- java.lang.reflect.Method#invoke()
created by cv.java.org.pl © 2023 All Rights Reserved.